package modelo.AlgoHero;

import java.util.ArrayList;
import modelo.Excepciones.ObjetoSinMasElementosExcepcion;

public class Verificador {

	// Atributos
	// --------------------------------------------//
	private ConjuntoElementosReproducibles conjunto = null;
	private MarcadorDePuntuaciones puntuacion; // ver si queda asi

	// getters y setters
	// --------------------------------------------//

	public void setPuntuacion(MarcadorDePuntuaciones puntuacion) {
		this.puntuacion = puntuacion;
	}

	public MarcadorDePuntuaciones getPuntuacion() {
		return this.puntuacion;
	}

	public void setConjunto(ConjuntoElementosReproducibles conjunto) {
		this.conjunto = conjunto;
	}

	// Metodos
	// --------------------------------------------//

	// Considero primer elemento con primere tecla y asi...
	public void verificarPresion(ArrayList<Tecla> teclas) {
		// fijarse por cada conjunto, que tecla tiene q tocar
		int cont = 0;
		ElementoReproducible elem = null;
		boolean tieneQuePresionarse = false;
		Tecla tecla = null;
		if (conjunto != null) {
			this.conjunto.reiniciarRecorrido();
			while (conjunto.hasNext()) {
				try {
					elem = conjunto.next();
				} catch (ObjetoSinMasElementosExcepcion ex) {
				}
				try {
					tecla = teclas.get(cont);
				} catch (Exception ex) {
				}
				tieneQuePresionarse = elem.debePrecionarse();

				if (tecla.isClicked())
					if (tecla.isClicked() && tieneQuePresionarse
							&& !elem.getPrecionado()) {
						// apreto y tiene que ser apretado no fue presionado
						// antes
						puntuacion.incrementarSimple();
					}
				if (tecla.isClicked() && !tieneQuePresionarse
						&& !elem.getPrecionado()) {
					// fue apretado ahora,no tiene que ser apretado y no fue
					// apretado antes
					// puntuacion = new MarcadorDePuntuaciones();
					// elem.setEstadoPresion(true);
				}
				if (!tecla.isClicked() && tieneQuePresionarse
						&& !elem.getPrecionado()) {
					// no fue apretado ahora,tiene que ser apretado y no fue
					// apretado antes
					// puntuacion = new MarcadorDePuntuaciones();
					// elem.setEstadoPresion(false);
				}
				// el resto no me importa, si no tenia que presionarse y no se
				// presiono, bien por el, no recibe puntos

				if (tecla.isClicked()) {
					if ((elem.getTipo() == TipoElementoReproducible.FINAL)
							|| (elem.getTipo() == TipoElementoReproducible.MEDIO)
							|| (elem.getTipo() == TipoElementoReproducible.INICIAL)
							|| (elem.getTipo() == TipoElementoReproducible.TOTAL)) {
						elem.setEstadoPresion(true);
					}
				} else
					elem.setEstadoPresion(false);

				cont++;
			}

		}
	}
}
